package com.icoolkj.kevin.config;

import com.icoolkj.kevin.service.OrderService;
import com.icoolkj.kevin.service.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;

/**
 * @author icoolkj
 * @version 1.0
 * @description
 * @createDate 2025/01/23 20:02
 */
@ComponentScan("com.icoolkj.kevin")
//@EnableAspectJAutoProxy  开启 Aspect 代理，AOP
//@EnableTransactionManagement // 开启事务
//@Configuration  //不加 @Configuration  事务不生效，加了才生效，为什么呢？ 因为 dataSource() 对象问题，
//如果不加，事务管理器的 dataSource 的连接对象和 jdbcTemplate 的 datsSource 的连接对象就会不同，根本问题所在；
//保证同一个 dataSource 连接对象，事务才能生效。  AppConfig 代理对象
public class AppConfig {

//	@Bean
//	public UserService userService(){
//		return new UserService();
//	}

	@Bean
	public JdbcTemplate jdbcTemplate(){
		return new JdbcTemplate(dataSource());
	}

	@Bean
	public PlatformTransactionManager transactionManager(){
		DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
		transactionManager.setDataSource(dataSource());
		return transactionManager;
	}

	@Bean
	public DataSource dataSource() {
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/test");
		dataSource.setUsername("root");
		dataSource.setPassword("icoolDP1988");
		return dataSource;
	}

}
